package com.caseprocessing.ai.language;

import java.util.List;
import java.util.Map;

/**
 * 语义分析结果模型集合
 * 定义各种语义分析任务的结果数据结构
 */
public class SemanticResultModels {
    
    /**
     * 语义分析结果
     */
    public static class SemanticAnalysisResult {
        private String mainAnalysis;
        private String mainTheme;
        private List<SemanticSegment> semanticSegments;
        private LogicalFlow logicalFlow;
        private LegalAnalysis legalAnalysis;
        private CompletenessAssessment completenessAssessment;
        private List<String> keywords;
        private double confidence;
        private String analysisTimestamp;
        
        public SemanticAnalysisResult(String mainAnalysis) {
            this.mainAnalysis = mainAnalysis;
            this.confidence = 0.8;
            this.analysisTimestamp = java.time.LocalDateTime.now().toString();
        }
        
        // Getters and setters
        public String getMainAnalysis() { return mainAnalysis; }
        public void setMainAnalysis(String mainAnalysis) { this.mainAnalysis = mainAnalysis; }
        
        public String getMainTheme() { return mainTheme; }
        public void setMainTheme(String mainTheme) { this.mainTheme = mainTheme; }
        
        public List<SemanticSegment> getSemanticSegments() { return semanticSegments; }
        public void setSemanticSegments(List<SemanticSegment> semanticSegments) { this.semanticSegments = semanticSegments; }
        
        public LogicalFlow getLogicalFlow() { return logicalFlow; }
        public void setLogicalFlow(LogicalFlow logicalFlow) { this.logicalFlow = logicalFlow; }
        
        public LegalAnalysis getLegalAnalysis() { return legalAnalysis; }
        public void setLegalAnalysis(LegalAnalysis legalAnalysis) { this.legalAnalysis = legalAnalysis; }
        
        public CompletenessAssessment getCompletenessAssessment() { return completenessAssessment; }
        public void setCompletenessAssessment(CompletenessAssessment completenessAssessment) { this.completenessAssessment = completenessAssessment; }
        
        public List<String> getKeywords() { return keywords; }
        public void setKeywords(List<String> keywords) { this.keywords = keywords; }
        
        public double getConfidence() { return confidence; }
        public void setConfidence(double confidence) { this.confidence = confidence; }
        
        public String getAnalysisTimestamp() { return analysisTimestamp; }
    }
    
    /**
     * 文档分类结果
     */
    public static class DocumentClassificationResult {
        private String rawAnalysis;
        private ClassificationResult classificationResult;
        private ClassificationReasoning classificationReasoning;
        private List<AlternativeClassification> alternativeClassifications;
        private NewTypeAnalysis newTypeAnalysis;
        
        public DocumentClassificationResult(String rawAnalysis) {
            this.rawAnalysis = rawAnalysis;
        }
        
        // Getters and setters
        public String getRawAnalysis() { return rawAnalysis; }
        public ClassificationResult getClassificationResult() { return classificationResult; }
        public void setClassificationResult(ClassificationResult classificationResult) { this.classificationResult = classificationResult; }
        
        public ClassificationReasoning getClassificationReasoning() { return classificationReasoning; }
        public void setClassificationReasoning(ClassificationReasoning classificationReasoning) { this.classificationReasoning = classificationReasoning; }
        
        public List<AlternativeClassification> getAlternativeClassifications() { return alternativeClassifications; }
        public void setAlternativeClassifications(List<AlternativeClassification> alternativeClassifications) { this.alternativeClassifications = alternativeClassifications; }
        
        public NewTypeAnalysis getNewTypeAnalysis() { return newTypeAnalysis; }
        public void setNewTypeAnalysis(NewTypeAnalysis newTypeAnalysis) { this.newTypeAnalysis = newTypeAnalysis; }
    }
    
    /**
     * 合规性推理结果
     */
    public static class ComplianceReasoningResult {
        private String rawAnalysis;
        private ComplianceAssessment complianceAssessment;
        private List<ComplianceIssue> complianceIssues;
        private List<ReasoningStep> reasoningSteps;
        private RiskAssessment riskAssessment;
        private List<ComplianceRecommendation> recommendations;
        
        public ComplianceReasoningResult(String rawAnalysis) {
            this.rawAnalysis = rawAnalysis;
        }
        
        // Getters and setters
        public String getRawAnalysis() { return rawAnalysis; }
        public ComplianceAssessment getComplianceAssessment() { return complianceAssessment; }
        public void setComplianceAssessment(ComplianceAssessment complianceAssessment) { this.complianceAssessment = complianceAssessment; }
        
        public List<ComplianceIssue> getComplianceIssues() { return complianceIssues; }
        public void setComplianceIssues(List<ComplianceIssue> complianceIssues) { this.complianceIssues = complianceIssues; }
        
        public List<ReasoningStep> getReasoningSteps() { return reasoningSteps; }
        public void setReasoningSteps(List<ReasoningStep> reasoningSteps) { this.reasoningSteps = reasoningSteps; }
        
        public RiskAssessment getRiskAssessment() { return riskAssessment; }
        public void setRiskAssessment(RiskAssessment riskAssessment) { this.riskAssessment = riskAssessment; }
        
        public List<ComplianceRecommendation> getRecommendations() { return recommendations; }
        public void setRecommendations(List<ComplianceRecommendation> recommendations) { this.recommendations = recommendations; }
    }
    
    /**
     * 法律要素提取结果
     */
    public static class LegalElementsResult {
        private String rawAnalysis;
        private PartyInformation partyInformation;
        private ViolationFacts violationFacts;
        private LegalBasis legalBasis;
        private ProceduralElements proceduralElements;
        private RightsAndObligations rightsAndObligations;
        private Map<String, Object> additionalElements;
        
        public LegalElementsResult(String rawAnalysis) {
            this.rawAnalysis = rawAnalysis;
        }
        
        // Getters and setters
        public String getRawAnalysis() { return rawAnalysis; }
        public PartyInformation getPartyInformation() { return partyInformation; }
        public void setPartyInformation(PartyInformation partyInformation) { this.partyInformation = partyInformation; }
        
        public ViolationFacts getViolationFacts() { return violationFacts; }
        public void setViolationFacts(ViolationFacts violationFacts) { this.violationFacts = violationFacts; }
        
        public LegalBasis getLegalBasis() { return legalBasis; }
        public void setLegalBasis(LegalBasis legalBasis) { this.legalBasis = legalBasis; }
        
        public ProceduralElements getProceduralElements() { return proceduralElements; }
        public void setProceduralElements(ProceduralElements proceduralElements) { this.proceduralElements = proceduralElements; }
        
        public RightsAndObligations getRightsAndObligations() { return rightsAndObligations; }
        public void setRightsAndObligations(RightsAndObligations rightsAndObligations) { this.rightsAndObligations = rightsAndObligations; }
        
        public Map<String, Object> getAdditionalElements() { return additionalElements; }
        public void setAdditionalElements(Map<String, Object> additionalElements) { this.additionalElements = additionalElements; }
    }
    
    /**
     * 一致性检查结果
     */
    public static class ConsistencyCheckResult {
        private String rawAnalysis;
        private ConsistencyAssessment consistencyAssessment;
        private DetailedAnalysis detailedAnalysis;
        private List<IdentifiedConflict> identifiedConflicts;
        private List<ImprovementRecommendation> improvementRecommendations;
        
        public ConsistencyCheckResult(String rawAnalysis) {
            this.rawAnalysis = rawAnalysis;
        }
        
        // Getters and setters
        public String getRawAnalysis() { return rawAnalysis; }
        public ConsistencyAssessment getConsistencyAssessment() { return consistencyAssessment; }
        public void setConsistencyAssessment(ConsistencyAssessment consistencyAssessment) { this.consistencyAssessment = consistencyAssessment; }
        
        public DetailedAnalysis getDetailedAnalysis() { return detailedAnalysis; }
        public void setDetailedAnalysis(DetailedAnalysis detailedAnalysis) { this.detailedAnalysis = detailedAnalysis; }
        
        public List<IdentifiedConflict> getIdentifiedConflicts() { return identifiedConflicts; }
        public void setIdentifiedConflicts(List<IdentifiedConflict> identifiedConflicts) { this.identifiedConflicts = identifiedConflicts; }
        
        public List<ImprovementRecommendation> getImprovementRecommendations() { return improvementRecommendations; }
        public void setImprovementRecommendations(List<ImprovementRecommendation> improvementRecommendations) { this.improvementRecommendations = improvementRecommendations; }
    }
    
    /**
     * 改进建议结果
     */
    public static class ImprovementSuggestionResult {
        private String rawAnalysis;
        private ImprovementSummary improvementSummary;
        private List<DetailedSuggestion> detailedSuggestions;
        private List<SystemicImprovement> systemicImprovements;
        private List<PreventionMeasure> preventionMeasures;
        
        public ImprovementSuggestionResult(String rawAnalysis) {
            this.rawAnalysis = rawAnalysis;
        }
        
        // Getters and setters
        public String getRawAnalysis() { return rawAnalysis; }
        public ImprovementSummary getImprovementSummary() { return improvementSummary; }
        public void setImprovementSummary(ImprovementSummary improvementSummary) { this.improvementSummary = improvementSummary; }
        
        public List<DetailedSuggestion> getDetailedSuggestions() { return detailedSuggestions; }
        public void setDetailedSuggestions(List<DetailedSuggestion> detailedSuggestions) { this.detailedSuggestions = detailedSuggestions; }
        
        public List<SystemicImprovement> getSystemicImprovements() { return systemicImprovements; }
        public void setSystemicImprovements(List<SystemicImprovement> systemicImprovements) { this.systemicImprovements = systemicImprovements; }
        
        public List<PreventionMeasure> getPreventionMeasures() { return preventionMeasures; }
        public void setPreventionMeasures(List<PreventionMeasure> preventionMeasures) { this.preventionMeasures = preventionMeasures; }
    }
    
    /**
     * 文档摘要结果
     */
    public static class DocumentSummaryResult {
        private String rawAnalysis;
        private String executiveSummary;
        private CaseOverview caseOverview;
        private DocumentComposition documentComposition;
        private ComplianceSummary complianceSummary;
        private List<KeyFinding> keyFindings;
        private List<String> nextSteps;
        
        public DocumentSummaryResult(String rawAnalysis) {
            this.rawAnalysis = rawAnalysis;
        }
        
        // Getters and setters
        public String getRawAnalysis() { return rawAnalysis; }
        public String getExecutiveSummary() { return executiveSummary; }
        public void setExecutiveSummary(String executiveSummary) { this.executiveSummary = executiveSummary; }
        
        public CaseOverview getCaseOverview() { return caseOverview; }
        public void setCaseOverview(CaseOverview caseOverview) { this.caseOverview = caseOverview; }
        
        public DocumentComposition getDocumentComposition() { return documentComposition; }
        public void setDocumentComposition(DocumentComposition documentComposition) { this.documentComposition = documentComposition; }
        
        public ComplianceSummary getComplianceSummary() { return complianceSummary; }
        public void setComplianceSummary(ComplianceSummary complianceSummary) { this.complianceSummary = complianceSummary; }
        
        public List<KeyFinding> getKeyFindings() { return keyFindings; }
        public void setKeyFindings(List<KeyFinding> keyFindings) { this.keyFindings = keyFindings; }
        
        public List<String> getNextSteps() { return nextSteps; }
        public void setNextSteps(List<String> nextSteps) { this.nextSteps = nextSteps; }
    }
    
    /**
     * 关键词主题提取结果
     */
    public static class KeywordTopicResult {
        private String rawAnalysis;
        private KeywordCategories keywords;
        private List<Theme> themes;
        private TopicHierarchy topicHierarchy;
        private List<SemanticCluster> semanticClusters;
        
        public KeywordTopicResult(String rawAnalysis) {
            this.rawAnalysis = rawAnalysis;
        }
        
        // Getters and setters
        public String getRawAnalysis() { return rawAnalysis; }
        public KeywordCategories getKeywords() { return keywords; }
        public void setKeywords(KeywordCategories keywords) { this.keywords = keywords; }
        
        public List<Theme> getThemes() { return themes; }
        public void setThemes(List<Theme> themes) { this.themes = themes; }
        
        public TopicHierarchy getTopicHierarchy() { return topicHierarchy; }
        public void setTopicHierarchy(TopicHierarchy topicHierarchy) { this.topicHierarchy = topicHierarchy; }
        
        public List<SemanticCluster> getSemanticClusters() { return semanticClusters; }
        public void setSemanticClusters(List<SemanticCluster> semanticClusters) { this.semanticClusters = semanticClusters; }
    }
    
    /**
     * 批量语义分析结果
     */
    public static class BatchSemanticResult {
        private List<SemanticAnalysisResult> individualResults;
        private String analysisType;
        private AggregatedInsights aggregatedInsights;
        private CommonPatterns commonPatterns;
        private QualityMetrics qualityMetrics;
        private String batchTimestamp;
        
        public BatchSemanticResult(List<SemanticAnalysisResult> individualResults, String analysisType) {
            this.individualResults = individualResults;
            this.analysisType = analysisType;
            this.batchTimestamp = java.time.LocalDateTime.now().toString();
        }
        
        // Getters and setters
        public List<SemanticAnalysisResult> getIndividualResults() { return individualResults; }
        public String getAnalysisType() { return analysisType; }
        public AggregatedInsights getAggregatedInsights() { return aggregatedInsights; }
        public void setAggregatedInsights(AggregatedInsights aggregatedInsights) { this.aggregatedInsights = aggregatedInsights; }
        
        public CommonPatterns getCommonPatterns() { return commonPatterns; }
        public void setCommonPatterns(CommonPatterns commonPatterns) { this.commonPatterns = commonPatterns; }
        
        public QualityMetrics getQualityMetrics() { return qualityMetrics; }
        public void setQualityMetrics(QualityMetrics qualityMetrics) { this.qualityMetrics = qualityMetrics; }
        
        public String getBatchTimestamp() { return batchTimestamp; }
    }
    
    // ============ 辅助数据结构 ============
    
    public static class SemanticSegment {
        private String segmentType;
        private String contentSummary;
        private List<String> keyConcepts;
        private String logicalRole;
        private String completeness;
        
        public SemanticSegment(String segmentType, String contentSummary) {
            this.segmentType = segmentType;
            this.contentSummary = contentSummary;
        }
        
        // Getters and setters
        public String getSegmentType() { return segmentType; }
        public String getContentSummary() { return contentSummary; }
        public List<String> getKeyConcepts() { return keyConcepts; }
        public void setKeyConcepts(List<String> keyConcepts) { this.keyConcepts = keyConcepts; }
        public String getLogicalRole() { return logicalRole; }
        public void setLogicalRole(String logicalRole) { this.logicalRole = logicalRole; }
        public String getCompleteness() { return completeness; }
        public void setCompleteness(String completeness) { this.completeness = completeness; }
    }
    
    public static class LogicalFlow {
        private double coherenceScore;
        private List<String> logicalGaps;
        private String reasoningStrength;
        
        public LogicalFlow(double coherenceScore, String reasoningStrength) {
            this.coherenceScore = coherenceScore;
            this.reasoningStrength = reasoningStrength;
        }
        
        // Getters and setters
        public double getCoherenceScore() { return coherenceScore; }
        public List<String> getLogicalGaps() { return logicalGaps; }
        public void setLogicalGaps(List<String> logicalGaps) { this.logicalGaps = logicalGaps; }
        public String getReasoningStrength() { return reasoningStrength; }
    }
    
    public static class LegalAnalysis {
        private List<String> legalConcepts;
        private List<String> applicableLaws;
        private List<String> legalRelationships;
        private List<String> proceduralRequirements;
        
        public LegalAnalysis() {}
        
        // Getters and setters
        public List<String> getLegalConcepts() { return legalConcepts; }
        public void setLegalConcepts(List<String> legalConcepts) { this.legalConcepts = legalConcepts; }
        public List<String> getApplicableLaws() { return applicableLaws; }
        public void setApplicableLaws(List<String> applicableLaws) { this.applicableLaws = applicableLaws; }
        public List<String> getLegalRelationships() { return legalRelationships; }
        public void setLegalRelationships(List<String> legalRelationships) { this.legalRelationships = legalRelationships; }
        public List<String> getProceduralRequirements() { return proceduralRequirements; }
        public void setProceduralRequirements(List<String> proceduralRequirements) { this.proceduralRequirements = proceduralRequirements; }
    }
    
    public static class CompletenessAssessment {
        private List<String> missingElements;
        private List<String> informationGaps;
        private List<String> improvementSuggestions;
        
        public CompletenessAssessment() {}
        
        // Getters and setters
        public List<String> getMissingElements() { return missingElements; }
        public void setMissingElements(List<String> missingElements) { this.missingElements = missingElements; }
        public List<String> getInformationGaps() { return informationGaps; }
        public void setInformationGaps(List<String> informationGaps) { this.informationGaps = informationGaps; }
        public List<String> getImprovementSuggestions() { return improvementSuggestions; }
        public void setImprovementSuggestions(List<String> improvementSuggestions) { this.improvementSuggestions = improvementSuggestions; }
    }
    
    public static class ClassificationResult {
        private String documentType;
        private double confidence;
        private String typeCategory;
        
        public ClassificationResult(String documentType, double confidence, String typeCategory) {
            this.documentType = documentType;
            this.confidence = confidence;
            this.typeCategory = typeCategory;
        }
        
        // Getters and setters
        public String getDocumentType() { return documentType; }
        public double getConfidence() { return confidence; }
        public String getTypeCategory() { return typeCategory; }
    }
    
    public static class ClassificationReasoning {
        private List<String> functionalFeatures;
        private List<String> structuralFeatures;
        private List<String> processFeatures;
        private List<String> semanticEvidence;
        
        public ClassificationReasoning() {}
        
        // Getters and setters
        public List<String> getFunctionalFeatures() { return functionalFeatures; }
        public void setFunctionalFeatures(List<String> functionalFeatures) { this.functionalFeatures = functionalFeatures; }
        public List<String> getStructuralFeatures() { return structuralFeatures; }
        public void setStructuralFeatures(List<String> structuralFeatures) { this.structuralFeatures = structuralFeatures; }
        public List<String> getProcessFeatures() { return processFeatures; }
        public void setProcessFeatures(List<String> processFeatures) { this.processFeatures = processFeatures; }
        public List<String> getSemanticEvidence() { return semanticEvidence; }
        public void setSemanticEvidence(List<String> semanticEvidence) { this.semanticEvidence = semanticEvidence; }
    }
    
    public static class AlternativeClassification {
        private String type;
        private double confidence;
        private String reasoning;
        
        public AlternativeClassification(String type, double confidence, String reasoning) {
            this.type = type;
            this.confidence = confidence;
            this.reasoning = reasoning;
        }
        
        // Getters and setters
        public String getType() { return type; }
        public double getConfidence() { return confidence; }
        public String getReasoning() { return reasoning; }
    }
    
    public static class NewTypeAnalysis {
        private boolean isNewType;
        private List<String> characteristics;
        private String suggestedName;
        private String relationshipToKnown;
        
        public NewTypeAnalysis(boolean isNewType) {
            this.isNewType = isNewType;
        }
        
        // Getters and setters
        public boolean isNewType() { return isNewType; }
        public List<String> getCharacteristics() { return characteristics; }
        public void setCharacteristics(List<String> characteristics) { this.characteristics = characteristics; }
        public String getSuggestedName() { return suggestedName; }
        public void setSuggestedName(String suggestedName) { this.suggestedName = suggestedName; }
        public String getRelationshipToKnown() { return relationshipToKnown; }
        public void setRelationshipToKnown(String relationshipToKnown) { this.relationshipToKnown = relationshipToKnown; }
    }
    
    public static class ComplianceAssessment {
        private String overallCompliance;
        private double complianceScore;
        private String riskLevel;
        
        public ComplianceAssessment(String overallCompliance, double complianceScore) {
            this.overallCompliance = overallCompliance;
            this.complianceScore = complianceScore;
        }
        
        // Getters and setters
        public String getOverallCompliance() { return overallCompliance; }
        public double getComplianceScore() { return complianceScore; }
        public String getRiskLevel() { return riskLevel; }
        public void setRiskLevel(String riskLevel) { this.riskLevel = riskLevel; }
    }
    
    public static class ComplianceIssue {
        private String issueType;
        private String description;
        private String severity;
        private List<String> affectedElements;
        private String recommendedAction;
        
        public ComplianceIssue(String issueType, String description, String severity) {
            this.issueType = issueType;
            this.description = description;
            this.severity = severity;
        }
        
        // Getters and setters
        public String getIssueType() { return issueType; }
        public String getDescription() { return description; }
        public String getSeverity() { return severity; }
        public List<String> getAffectedElements() { return affectedElements; }
        public void setAffectedElements(List<String> affectedElements) { this.affectedElements = affectedElements; }
        public String getRecommendedAction() { return recommendedAction; }
        public void setRecommendedAction(String recommendedAction) { this.recommendedAction = recommendedAction; }
    }
    
    public static class ReasoningStep {
        private String step;
        private String reasoning;
        private String conclusion;
        private double confidence;
        
        public ReasoningStep(String step, String reasoning, String conclusion) {
            this.step = step;
            this.reasoning = reasoning;
            this.conclusion = conclusion;
            this.confidence = 0.8;
        }
        
        // Getters and setters
        public String getStep() { return step; }
        public String getReasoning() { return reasoning; }
        public String getConclusion() { return conclusion; }
        public double getConfidence() { return confidence; }
        public void setConfidence(double confidence) { this.confidence = confidence; }
    }
    
    public static class RiskAssessment {
        private String riskLevel;
        private List<String> riskFactors;
        private List<String> mitigationStrategies;
        private double riskScore;
        
        public RiskAssessment(String riskLevel, double riskScore) {
            this.riskLevel = riskLevel;
            this.riskScore = riskScore;
        }
        
        // Getters and setters
        public String getRiskLevel() { return riskLevel; }
        public List<String> getRiskFactors() { return riskFactors; }
        public void setRiskFactors(List<String> riskFactors) { this.riskFactors = riskFactors; }
        public List<String> getMitigationStrategies() { return mitigationStrategies; }
        public void setMitigationStrategies(List<String> mitigationStrategies) { this.mitigationStrategies = mitigationStrategies; }
        public double getRiskScore() { return riskScore; }
    }
    
    public static class ComplianceRecommendation {
        private String recommendationType;
        private String description;
        private String priority;
        private String implementation;
        private String expectedOutcome;
        
        public ComplianceRecommendation(String recommendationType, String description, String priority) {
            this.recommendationType = recommendationType;
            this.description = description;
            this.priority = priority;
        }
        
        // Getters and setters
        public String getRecommendationType() { return recommendationType; }
        public String getDescription() { return description; }
        public String getPriority() { return priority; }
        public String getImplementation() { return implementation; }
        public void setImplementation(String implementation) { this.implementation = implementation; }
        public String getExpectedOutcome() { return expectedOutcome; }
        public void setExpectedOutcome(String expectedOutcome) { this.expectedOutcome = expectedOutcome; }
    }
    
    // 继续添加其他数据结构...
    public static class PartyInformation {
        private Map<String, Object> naturalPersons;
        private Map<String, Object> legalEntities;
        private Map<String, Object> otherParties;
        
        public PartyInformation() {}
        
        // Getters and setters
        public Map<String, Object> getNaturalPersons() { return naturalPersons; }
        public void setNaturalPersons(Map<String, Object> naturalPersons) { this.naturalPersons = naturalPersons; }
        public Map<String, Object> getLegalEntities() { return legalEntities; }
        public void setLegalEntities(Map<String, Object> legalEntities) { this.legalEntities = legalEntities; }
        public Map<String, Object> getOtherParties() { return otherParties; }
        public void setOtherParties(Map<String, Object> otherParties) { this.otherParties = otherParties; }
    }
    
    public static class ViolationFacts {
        private String violationDescription;
        private String timeAndPlace;
        private String circumstances;
        private List<String> evidenceList;
        
        public ViolationFacts() {}
        
        // Getters and setters
        public String getViolationDescription() { return violationDescription; }
        public void setViolationDescription(String violationDescription) { this.violationDescription = violationDescription; }
        public String getTimeAndPlace() { return timeAndPlace; }
        public void setTimeAndPlace(String timeAndPlace) { this.timeAndPlace = timeAndPlace; }
        public String getCircumstances() { return circumstances; }
        public void setCircumstances(String circumstances) { this.circumstances = circumstances; }
        public List<String> getEvidenceList() { return evidenceList; }
        public void setEvidenceList(List<String> evidenceList) { this.evidenceList = evidenceList; }
    }
    
    public static class LegalBasis {
        private List<String> violationLaws;
        private List<String> penaltyLaws;
        private List<String> proceduralLaws;
        private String discretionBasis;
        
        public LegalBasis() {}
        
        // Getters and setters
        public List<String> getViolationLaws() { return violationLaws; }
        public void setViolationLaws(List<String> violationLaws) { this.violationLaws = violationLaws; }
        public List<String> getPenaltyLaws() { return penaltyLaws; }
        public void setPenaltyLaws(List<String> penaltyLaws) { this.penaltyLaws = penaltyLaws; }
        public List<String> getProceduralLaws() { return proceduralLaws; }
        public void setProceduralLaws(List<String> proceduralLaws) { this.proceduralLaws = proceduralLaws; }
        public String getDiscretionBasis() { return discretionBasis; }
        public void setDiscretionBasis(String discretionBasis) { this.discretionBasis = discretionBasis; }
    }
    
    public static class ProceduralElements {
        private String investigationProcess;
        private String notificationProcess;
        private String hearingProcess;
        private String decisionProcess;
        private List<String> timeNodes;
        
        public ProceduralElements() {}
        
        // Getters and setters
        public String getInvestigationProcess() { return investigationProcess; }
        public void setInvestigationProcess(String investigationProcess) { this.investigationProcess = investigationProcess; }
        public String getNotificationProcess() { return notificationProcess; }
        public void setNotificationProcess(String notificationProcess) { this.notificationProcess = notificationProcess; }
        public String getHearingProcess() { return hearingProcess; }
        public void setHearingProcess(String hearingProcess) { this.hearingProcess = hearingProcess; }
        public String getDecisionProcess() { return decisionProcess; }
        public void setDecisionProcess(String decisionProcess) { this.decisionProcess = decisionProcess; }
        public List<String> getTimeNodes() { return timeNodes; }
        public void setTimeNodes(List<String> timeNodes) { this.timeNodes = timeNodes; }
    }
    
    public static class RightsAndObligations {
        private List<String> rights;
        private List<String> obligations;
        private List<String> remedies;
        private String enforcement;
        
        public RightsAndObligations() {}
        
        // Getters and setters
        public List<String> getRights() { return rights; }
        public void setRights(List<String> rights) { this.rights = rights; }
        public List<String> getObligations() { return obligations; }
        public void setObligations(List<String> obligations) { this.obligations = obligations; }
        public List<String> getRemedies() { return remedies; }
        public void setRemedies(List<String> remedies) { this.remedies = remedies; }
        public String getEnforcement() { return enforcement; }
        public void setEnforcement(String enforcement) { this.enforcement = enforcement; }
    }
    
    // 继续定义其他数据结构...
    public static class ConsistencyAssessment {
        private double overallScore;
        private String consistencyLevel;
        
        public ConsistencyAssessment(double overallScore, String consistencyLevel) {
            this.overallScore = overallScore;
            this.consistencyLevel = consistencyLevel;
        }
        
        // Getters and setters
        public double getOverallScore() { return overallScore; }
        public String getConsistencyLevel() { return consistencyLevel; }
    }
    
    public static class DetailedAnalysis {
        private ConsistencyCategory factualConsistency;
        private ConsistencyCategory legalConsistency;
        private ConsistencyCategory proceduralConsistency;
        private ConsistencyCategory logicalConsistency;
        
        public DetailedAnalysis() {}
        
        // Getters and setters
        public ConsistencyCategory getFactualConsistency() { return factualConsistency; }
        public void setFactualConsistency(ConsistencyCategory factualConsistency) { this.factualConsistency = factualConsistency; }
        public ConsistencyCategory getLegalConsistency() { return legalConsistency; }
        public void setLegalConsistency(ConsistencyCategory legalConsistency) { this.legalConsistency = legalConsistency; }
        public ConsistencyCategory getProceduralConsistency() { return proceduralConsistency; }
        public void setProceduralConsistency(ConsistencyCategory proceduralConsistency) { this.proceduralConsistency = proceduralConsistency; }
        public ConsistencyCategory getLogicalConsistency() { return logicalConsistency; }
        public void setLogicalConsistency(ConsistencyCategory logicalConsistency) { this.logicalConsistency = logicalConsistency; }
    }
    
    public static class ConsistencyCategory {
        private double score;
        private List<String> issues;
        private List<String> conflicts;
        
        public ConsistencyCategory(double score) {
            this.score = score;
        }
        
        // Getters and setters
        public double getScore() { return score; }
        public List<String> getIssues() { return issues; }
        public void setIssues(List<String> issues) { this.issues = issues; }
        public List<String> getConflicts() { return conflicts; }
        public void setConflicts(List<String> conflicts) { this.conflicts = conflicts; }
    }
    
    public static class IdentifiedConflict {
        private String conflictType;
        private String description;
        private String severity;
        private List<String> affectedDocuments;
        private String resolutionSuggestion;
        
        public IdentifiedConflict(String conflictType, String description, String severity) {
            this.conflictType = conflictType;
            this.description = description;
            this.severity = severity;
        }
        
        // Getters and setters
        public String getConflictType() { return conflictType; }
        public String getDescription() { return description; }
        public String getSeverity() { return severity; }
        public List<String> getAffectedDocuments() { return affectedDocuments; }
        public void setAffectedDocuments(List<String> affectedDocuments) { this.affectedDocuments = affectedDocuments; }
        public String getResolutionSuggestion() { return resolutionSuggestion; }
        public void setResolutionSuggestion(String resolutionSuggestion) { this.resolutionSuggestion = resolutionSuggestion; }
    }
    
    public static class ImprovementRecommendation {
        private String area;
        private String priority;
        private String action;
        private String expectedOutcome;
        
        public ImprovementRecommendation(String area, String priority, String action) {
            this.area = area;
            this.priority = priority;
            this.action = action;
        }
        
        // Getters and setters
        public String getArea() { return area; }
        public String getPriority() { return priority; }
        public String getAction() { return action; }
        public String getExpectedOutcome() { return expectedOutcome; }
        public void setExpectedOutcome(String expectedOutcome) { this.expectedOutcome = expectedOutcome; }
    }
    
    // 继续添加其他模型类...
    public static class ImprovementSummary {
        private int totalIssues;
        private List<String> improvementAreas;
        private String priorityLevel;
        private String estimatedEffort;
        
        public ImprovementSummary(int totalIssues, String priorityLevel) {
            this.totalIssues = totalIssues;
            this.priorityLevel = priorityLevel;
        }
        
        // Getters and setters
        public int getTotalIssues() { return totalIssues; }
        public List<String> getImprovementAreas() { return improvementAreas; }
        public void setImprovementAreas(List<String> improvementAreas) { this.improvementAreas = improvementAreas; }
        public String getPriorityLevel() { return priorityLevel; }
        public String getEstimatedEffort() { return estimatedEffort; }
        public void setEstimatedEffort(String estimatedEffort) { this.estimatedEffort = estimatedEffort; }
    }
    
    public static class DetailedSuggestion {
        private String issueId;
        private String issueDescription;
        private String improvementType;
        private String priority;
        private List<SpecificAction> specificActions;
        private String expectedOutcome;
        private String riskMitigation;
        private List<String> resourcesNeeded;
        
        public DetailedSuggestion(String issueId, String issueDescription, String priority) {
            this.issueId = issueId;
            this.issueDescription = issueDescription;
            this.priority = priority;
        }
        
        // Getters and setters (省略具体实现)
        public String getIssueId() { return issueId; }
        public String getIssueDescription() { return issueDescription; }
        public String getImprovementType() { return improvementType; }
        public void setImprovementType(String improvementType) { this.improvementType = improvementType; }
        public String getPriority() { return priority; }
        public List<SpecificAction> getSpecificActions() { return specificActions; }
        public void setSpecificActions(List<SpecificAction> specificActions) { this.specificActions = specificActions; }
        public String getExpectedOutcome() { return expectedOutcome; }
        public void setExpectedOutcome(String expectedOutcome) { this.expectedOutcome = expectedOutcome; }
        public String getRiskMitigation() { return riskMitigation; }
        public void setRiskMitigation(String riskMitigation) { this.riskMitigation = riskMitigation; }
        public List<String> getResourcesNeeded() { return resourcesNeeded; }
        public void setResourcesNeeded(List<String> resourcesNeeded) { this.resourcesNeeded = resourcesNeeded; }
    }
    
    public static class SpecificAction {
        private String action;
        private String responsibility;
        private String timeline;
        private String verification;
        
        public SpecificAction(String action, String responsibility, String timeline) {
            this.action = action;
            this.responsibility = responsibility;
            this.timeline = timeline;
        }
        
        // Getters and setters
        public String getAction() { return action; }
        public String getResponsibility() { return responsibility; }
        public String getTimeline() { return timeline; }
        public String getVerification() { return verification; }
        public void setVerification(String verification) { this.verification = verification; }
    }
    
    public static class SystemicImprovement {
        private String area;
        private String description;
        private String implementationPlan;
        private List<String> successMetrics;
        private List<String> longTermBenefits;
        
        public SystemicImprovement(String area, String description) {
            this.area = area;
            this.description = description;
        }
        
        // Getters and setters
        public String getArea() { return area; }
        public String getDescription() { return description; }
        public String getImplementationPlan() { return implementationPlan; }
        public void setImplementationPlan(String implementationPlan) { this.implementationPlan = implementationPlan; }
        public List<String> getSuccessMetrics() { return successMetrics; }
        public void setSuccessMetrics(List<String> successMetrics) { this.successMetrics = successMetrics; }
        public List<String> getLongTermBenefits() { return longTermBenefits; }
        public void setLongTermBenefits(List<String> longTermBenefits) { this.longTermBenefits = longTermBenefits; }
    }
    
    public static class PreventionMeasure {
        private String measure;
        private String target;
        private String implementation;
        private String monitoring;
        
        public PreventionMeasure(String measure, String target) {
            this.measure = measure;
            this.target = target;
        }
        
        // Getters and setters
        public String getMeasure() { return measure; }
        public String getTarget() { return target; }
        public String getImplementation() { return implementation; }
        public void setImplementation(String implementation) { this.implementation = implementation; }
        public String getMonitoring() { return monitoring; }
        public void setMonitoring(String monitoring) { this.monitoring = monitoring; }
    }
    
    public static class CaseOverview {
        private String caseType;
        private List<String> partiesInvolved;
        private List<String> mainIssues;
        private String processingPeriod;
        private String finalOutcome;
        
        public CaseOverview() {}
        
        // Getters and setters
        public String getCaseType() { return caseType; }
        public void setCaseType(String caseType) { this.caseType = caseType; }
        public List<String> getPartiesInvolved() { return partiesInvolved; }
        public void setPartiesInvolved(List<String> partiesInvolved) { this.partiesInvolved = partiesInvolved; }
        public List<String> getMainIssues() { return mainIssues; }
        public void setMainIssues(List<String> mainIssues) { this.mainIssues = mainIssues; }
        public String getProcessingPeriod() { return processingPeriod; }
        public void setProcessingPeriod(String processingPeriod) { this.processingPeriod = processingPeriod; }
        public String getFinalOutcome() { return finalOutcome; }
        public void setFinalOutcome(String finalOutcome) { this.finalOutcome = finalOutcome; }
    }
    
    public static class DocumentComposition {
        private int totalDocuments;
        private List<DocumentTypeInfo> documentTypes;
        private String completenessAssessment;
        
        public DocumentComposition(int totalDocuments) {
            this.totalDocuments = totalDocuments;
        }
        
        // Getters and setters
        public int getTotalDocuments() { return totalDocuments; }
        public List<DocumentTypeInfo> getDocumentTypes() { return documentTypes; }
        public void setDocumentTypes(List<DocumentTypeInfo> documentTypes) { this.documentTypes = documentTypes; }
        public String getCompletenessAssessment() { return completenessAssessment; }
        public void setCompletenessAssessment(String completenessAssessment) { this.completenessAssessment = completenessAssessment; }
    }
    
    public static class DocumentTypeInfo {
        private String type;
        private int count;
        private String pages;
        private String keyContent;
        
        public DocumentTypeInfo(String type, int count) {
            this.type = type;
            this.count = count;
        }
        
        // Getters and setters
        public String getType() { return type; }
        public int getCount() { return count; }
        public String getPages() { return pages; }
        public void setPages(String pages) { this.pages = pages; }
        public String getKeyContent() { return keyContent; }
        public void setKeyContent(String keyContent) { this.keyContent = keyContent; }
    }
    
    public static class ComplianceSummary {
        private String proceduralCompliance;
        private String substantiveCompliance;
        private List<String> identifiedIssues;
        private String riskLevel;
        private String improvementPriority;
        
        public ComplianceSummary() {}
        
        // Getters and setters
        public String getProceduralCompliance() { return proceduralCompliance; }
        public void setProceduralCompliance(String proceduralCompliance) { this.proceduralCompliance = proceduralCompliance; }
        public String getSubstantiveCompliance() { return substantiveCompliance; }
        public void setSubstantiveCompliance(String substantiveCompliance) { this.substantiveCompliance = substantiveCompliance; }
        public List<String> getIdentifiedIssues() { return identifiedIssues; }
        public void setIdentifiedIssues(List<String> identifiedIssues) { this.identifiedIssues = identifiedIssues; }
        public String getRiskLevel() { return riskLevel; }
        public void setRiskLevel(String riskLevel) { this.riskLevel = riskLevel; }
        public String getImprovementPriority() { return improvementPriority; }
        public void setImprovementPriority(String improvementPriority) { this.improvementPriority = improvementPriority; }
    }
    
    public static class KeyFinding {
        private String finding;
        private String impact;
        private String recommendation;
        
        public KeyFinding(String finding, String impact, String recommendation) {
            this.finding = finding;
            this.impact = impact;
            this.recommendation = recommendation;
        }
        
        // Getters and setters
        public String getFinding() { return finding; }
        public String getImpact() { return impact; }
        public String getRecommendation() { return recommendation; }
    }
    
    public static class KeywordCategories {
        private List<KeywordInfo> legalTerms;
        private List<KeywordInfo> actionTerms;
        private List<KeywordInfo> entityTerms;
        private List<KeywordInfo> proceduralTerms;
        
        public KeywordCategories() {}
        
        // Getters and setters
        public List<KeywordInfo> getLegalTerms() { return legalTerms; }
        public void setLegalTerms(List<KeywordInfo> legalTerms) { this.legalTerms = legalTerms; }
        public List<KeywordInfo> getActionTerms() { return actionTerms; }
        public void setActionTerms(List<KeywordInfo> actionTerms) { this.actionTerms = actionTerms; }
        public List<KeywordInfo> getEntityTerms() { return entityTerms; }
        public void setEntityTerms(List<KeywordInfo> entityTerms) { this.entityTerms = entityTerms; }
        public List<KeywordInfo> getProceduralTerms() { return proceduralTerms; }
        public void setProceduralTerms(List<KeywordInfo> proceduralTerms) { this.proceduralTerms = proceduralTerms; }
    }
    
    public static class KeywordInfo {
        private String term;
        private int frequency;
        private double importance;
        
        public KeywordInfo(String term, int frequency, double importance) {
            this.term = term;
            this.frequency = frequency;
            this.importance = importance;
        }
        
        // Getters and setters
        public String getTerm() { return term; }
        public int getFrequency() { return frequency; }
        public double getImportance() { return importance; }
    }
    
    public static class Theme {
        private String theme;
        private String description;
        private double relevance;
        private List<String> supportingKeywords;
        private String themeType;
        
        public Theme(String theme, String description, double relevance) {
            this.theme = theme;
            this.description = description;
            this.relevance = relevance;
        }
        
        // Getters and setters
        public String getTheme() { return theme; }
        public String getDescription() { return description; }
        public double getRelevance() { return relevance; }
        public List<String> getSupportingKeywords() { return supportingKeywords; }
        public void setSupportingKeywords(List<String> supportingKeywords) { this.supportingKeywords = supportingKeywords; }
        public String getThemeType() { return themeType; }
        public void setThemeType(String themeType) { this.themeType = themeType; }
    }
    
    public static class TopicHierarchy {
        private String mainTopic;
        private List<String> subTopics;
        private List<String> relatedTopics;
        private List<String> peripheralTopics;
        
        public TopicHierarchy(String mainTopic) {
            this.mainTopic = mainTopic;
        }
        
        // Getters and setters
        public String getMainTopic() { return mainTopic; }
        public List<String> getSubTopics() { return subTopics; }
        public void setSubTopics(List<String> subTopics) { this.subTopics = subTopics; }
        public List<String> getRelatedTopics() { return relatedTopics; }
        public void setRelatedTopics(List<String> relatedTopics) { this.relatedTopics = relatedTopics; }
        public List<String> getPeripheralTopics() { return peripheralTopics; }
        public void setPeripheralTopics(List<String> peripheralTopics) { this.peripheralTopics = peripheralTopics; }
    }
    
    public static class SemanticCluster {
        private String clusterName;
        private List<String> keywords;
        private double coherence;
        private double significance;
        
        public SemanticCluster(String clusterName, double coherence, double significance) {
            this.clusterName = clusterName;
            this.coherence = coherence;
            this.significance = significance;
        }
        
        // Getters and setters
        public String getClusterName() { return clusterName; }
        public List<String> getKeywords() { return keywords; }
        public void setKeywords(List<String> keywords) { this.keywords = keywords; }
        public double getCoherence() { return coherence; }
        public double getSignificance() { return significance; }
    }
    
    public static class AggregatedInsights {
        private List<String> commonThemes;
        private List<String> frequentIssues;
        private List<String> bestPractices;
        private Map<String, Double> qualityTrends;
        
        public AggregatedInsights() {}
        
        // Getters and setters
        public List<String> getCommonThemes() { return commonThemes; }
        public void setCommonThemes(List<String> commonThemes) { this.commonThemes = commonThemes; }
        public List<String> getFrequentIssues() { return frequentIssues; }
        public void setFrequentIssues(List<String> frequentIssues) { this.frequentIssues = frequentIssues; }
        public List<String> getBestPractices() { return bestPractices; }
        public void setBestPractices(List<String> bestPractices) { this.bestPractices = bestPractices; }
        public Map<String, Double> getQualityTrends() { return qualityTrends; }
        public void setQualityTrends(Map<String, Double> qualityTrends) { this.qualityTrends = qualityTrends; }
    }
    
    public static class CommonPatterns {
        private List<String> structuralPatterns;
        private List<String> contentPatterns;
        private List<String> compliancePatterns;
        private List<String> issuePatterns;
        
        public CommonPatterns() {}
        
        // Getters and setters
        public List<String> getStructuralPatterns() { return structuralPatterns; }
        public void setStructuralPatterns(List<String> structuralPatterns) { this.structuralPatterns = structuralPatterns; }
        public List<String> getContentPatterns() { return contentPatterns; }
        public void setContentPatterns(List<String> contentPatterns) { this.contentPatterns = contentPatterns; }
        public List<String> getCompliancePatterns() { return compliancePatterns; }
        public void setCompliancePatterns(List<String> compliancePatterns) { this.compliancePatterns = compliancePatterns; }
        public List<String> getIssuePatterns() { return issuePatterns; }
        public void setIssuePatterns(List<String> issuePatterns) { this.issuePatterns = issuePatterns; }
    }
    
    public static class QualityMetrics {
        private double averageConfidence;
        private double completenessRate;
        private double consistencyRate;
        private double complianceRate;
        private int totalProcessed;
        private int successfulAnalyses;
        
        public QualityMetrics() {}
        
        // Getters and setters
        public double getAverageConfidence() { return averageConfidence; }
        public void setAverageConfidence(double averageConfidence) { this.averageConfidence = averageConfidence; }
        public double getCompletenessRate() { return completenessRate; }
        public void setCompletenessRate(double completenessRate) { this.completenessRate = completenessRate; }
        public double getConsistencyRate() { return consistencyRate; }
        public void setConsistencyRate(double consistencyRate) { this.consistencyRate = consistencyRate; }
        public double getComplianceRate() { return complianceRate; }
        public void setComplianceRate(double complianceRate) { this.complianceRate = complianceRate; }
        public int getTotalProcessed() { return totalProcessed; }
        public void setTotalProcessed(int totalProcessed) { this.totalProcessed = totalProcessed; }
        public int getSuccessfulAnalyses() { return successfulAnalyses; }
        public void setSuccessfulAnalyses(int successfulAnalyses) { this.successfulAnalyses = successfulAnalyses; }
    }
}